const mysql = require("mysql");
const config = require("./config");
const pool = mysql.createPool(config.db);
/**
 * 执行查询并返回结果对象数组
 * @param {String} sql 要执行的SQL代码
 * @param {...any} params 参数
 * @returns
 */
const query = (sql, ...params) => {
    return new Promise(function (resolve, reject) {
        pool.getConnection(function (err, connection) {
            if (err) {
                reject(err);
                return;
            }
            const query = connection.query(sql, params, function (error, res) {
                if(config.db.showSQL){
                    console.log(query.sql);
                }
                connection.release();
                if (error) {
                    reject(error);
                    return;
                }
                resolve(res);
            });
        });
    });
};
/**
 * 查询并返回第一个对象,如果没有查询到数据将返回null
 * @param {String} sql 要执行的SQL代码
 * @param {...any} params 参数
 * @returns
 */
const queryOne = (sql, ...params) => {
    return new Promise(function (resolve, reject) {
        pool.getConnection(function (err, connection) {
            if (err) {
                reject(err);
                return;
            }
            const query = connection.query(sql, params, function (error, res) {
                if(config.db.showSQL){
                    console.log(query.sql);
                }
                connection.release();
                if (error) {
                    reject(error);
                    return;
                }
                resolve(res[0] || null);
            });
        });
    });
};
/**
 * 执行非查询代码，返回执行结果
 * @param {String} sql 要执行的SQL代码
 * @param {...any} params 参数
 * @returns
 */
const execute = (sql, ...params) => {
    return new Promise(function (resolve, reject) {
        pool.getConnection(function (err, connection) {
            if (err) {
                reject(err);
                return;
            }
            const query =  connection.query(sql, params, function (error, res) {
                if(config.db.showSQL){
                    console.log(query.sql);
                }
                connection.release();
                if (error) {
                    reject(error);
                    return;
                }
                resolve(res);
            });
        });
    });
};

//模块导出
module.exports = {
    query,
    queryOne,
    execute,
}
